home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import gtk
- import gobject
- import gtk.glade as gtk
- import os
- import os.path as os
- import time
- from gettext import gettext as _
- from gettext import ngettext
- from defaults import *
-
- def format_time(time, round_at = None, friendly = False):
- """Format a time for display to the user.
-
- If round_at, we round all times to some number of seconds.
-
- If friendly, we don't bother showing the user more than two
- units. i.e. 3 days 2 hours, or 2 minutes 30 seconds, but not 3
- days, 4 hours, 2 minutes and 3 seconds...
- """
- time = int(time)
- time_strings = []
- units = [
- (int(3.15576e+07), (lambda years: ngettext('%(n)s year', '%(n)s years', years) % {
- 'n': years })),
- (2678400, (lambda months: ngettext('%(n)s month', '%(n)s months', months) % {
- 'n': months })),
- (604800, (lambda weeks: ngettext('%(n)s week', '%(n)s weeks', weeks) % {
- 'n': weeks })),
- (86400, (lambda days: ngettext('%(n)s day', '%(n)s days', days) % {
- 'n': days })),
- (3600, (lambda hours: ngettext('%(n)s hour', '%(n)s hours', hours) % {
- 'n': hours })),
- (60, (lambda minutes: ngettext('%(n)s minute', '%(n)s minutes', minutes) % {
- 'n': minutes })),
- (1, (lambda seconds: ngettext('%(n)s second', '%(n)s seconds', seconds) % {
- 'n': seconds }))]
- for divisor, unit_formatter in units:
- time_covered = time / divisor
- if time_covered:
- if round_at and len(time_strings) + 1 >= round_at:
- time_covered = int(round(float(time) / divisor))
- time_strings.append(unit_formatter(time_covered))
- break
- else:
- time_strings.append(unit_formatter(time_covered))
- time = time - time_covered * divisor
- len(time_strings) + 1 >= round_at
-
- if friendly and len(time_strings) > 2:
- time_stings = time_strings[:2]
-
- if len(time_strings) > 2:
- return _(' and ').join([
- _(', ').join(time_strings[0:-1]),
- time_strings[-1]])
- return _(' ').join(time_strings)
-
-
- def format_time_compact(tim):
- tim = int(tim)
- hours = tim / 3600
- minutes = (tim % 3600) / 60
- seconds = tim % 3600 % 60
- return '%d:%02d:%02d' % (hours, minutes, seconds)
-
-
- def format_date(tim):
- lt = time.localtime(tim)
- hours = int(time.strftime('%H', lt))
- minutes = int(time.strftime('%M', lt))
- diff = time.time() - tim
- to_yesterday = hours * 60 * 60 + minutes * 60
- if diff < to_yesterday:
- return time.strftime(_('Today %R %p'), lt)
- if diff < to_yesterday + 86400:
- return time.strftime(_('Yesterday %R %p'), lt)
- if diff < 604800:
- return time.strftime(_('%A %H:%M'), lt)
- return time.strftime(_('%A %B %d %R %p'), lt)
-
-
- def format_friendly_date(tim):
- lt = time.localtime(tim)
- hours = int(time.strftime('%H', lt))
- minutes = int(time.strftime('%M', lt))
- diff = time.time() - tim
- ct = time.localtime()
- chour = ct[3]
- cmin = ct[4]
- to_yesterday = chour * 60 * 60 + cmin * 60
- if diff < to_yesterday:
- if diff < 3600:
- if int(diff) / 60:
- m = diff / 60
- return ngettext('%(n)s minute ago', '%(n)s minutes ago', m) % {
- 'n': int(m) }
- return ngettext('%(n)s second ago', '%(n)s seconds ago', int(diff)) % {
- 'n': int(diff) }
- diff < 3600
- return time.strftime(_('at %I:%M %p'), lt)
- diff < to_yesterday
- if diff < to_yesterday + 86400:
- return time.strftime(_('yesterday at %I:%M %p'), lt)
- if diff < to_yesterday + 518400:
- return time.strftime(_('%A %I:%M %p'), lt)
- return time.strftime(_('%B%e'), lt)
-
-
- class ActiveTimer(gobject.GObject):
- '''A timer to keep track of how much time a window is active.'''
- __gsignals__ = {
- 'timing-started': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),
- 'timing-stopped': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()) }
-
- def __init__(self, window):
- gobject.GObject.__init__(self)
- self.window = window
- self.timing_running = False
- self.__absolute_start_time__ = 0
- self.tot_time = 0
- self.tot_time_complete = 0
- self.window.connect('window-state-event', self.window_state_event_cb)
- self.window.connect('state-changed', self.window_state_event_cb)
- self.window.connect('visibility-notify-event', self.window_state_event_cb)
- self.window.connect('expose-event', self.window_state_event_cb)
- self.window.connect('no-expose-event', self.window_state_event_cb)
-
-
- def window_state_event_cb(self, *args):
- if self.window.is_active():
- self.toggle_timing(True)
- else:
- self.toggle_timing(False)
-
-
- def toggle_timing(self, on):
- if not self.__absolute_start_time__:
- return None
- if on and not (self.timing_running):
- self.timing_started_at = time.time()
- self.timing_running = True
- self.emit('timing-started')
-
-
-
- def start_timing(self):
- self.timing_running = False
- self.__absolute_start_time__ = 0
- self.tot_time = 0
- self.tot_time_complete = 0
- self.__absolute_start_time__ = time.time()
- self.toggle_timing(True)
-
-
- def finish_timing(self):
- self.toggle_timing(False)
- if self.tot_time < 1:
- self.tot_time = 1
-
- if self.tot_time > self.tot_time_complete:
- self.tot_time_complete = self.tot_time
-
-
-
- def active_time_string(self):
- return format_time(self.tot_time)
-
-
- def total_time_string(self):
- return format_time(self.tot_time_complete)
-
-
- if gtk.pygtk_version[1] < 8:
- gobject.type_register(ActiveTimer)
-
-